package com.tinyengine.it.common.utils;

import java.util.Arrays;
import java.util.List;

public class JavaClassNameValidator {

    // Java 的关键字和保留字
    private static final List<String> JAVA_KEYWORDS = Arrays.asList(
            "abstract", "assert", "boolean", "break", "byte", "case", "catch", "char", "class",
            "const", "continue", "default", "do", "double", "else", "enum", "extends", "final",
            "finally", "float", "for", "goto", "if", "implements", "import", "instanceof", "int",
            "interface", "long", "native", "new", "null", "package", "private", "protected",
            "public", "return", "short", "static", "strictfp", "super", "switch", "synchronized",
            "this", "throw", "throws", "transient", "try", "void", "volatile", "while"
    );

    /**
     * 校验 Java 类名是否符合规则
     *
     * @param className 类名
     * @return 如果类名符合规则返回 true，否则返回 false
     */
    public static String isValidClassName(String className) {
        // 1. 类名不能为空
        if (className == null || className.trim().isEmpty()) {
            return "字段code不能为空";
        }

        // 2. 类名不能是 Java 关键字
        if (JAVA_KEYWORDS.contains(className.toLowerCase())) {
            return "字段code不能是 Java 关键字";
        }

        // 3. 类名首字母必须大写
        //if (!Character.isUpperCase(className.charAt(0))) {
        //    return "code首字母必须大写";
        //}

        // 4. 类名必须符合驼峰命名法，且不能包含下划线
        //if (className.contains("_") || !className.matches("[A-Za-z]+")) {
        //    return false;
        //}

        // 5. 类名不能包含特殊字符
        // 允许字母和数字，但类名不能以数字开头
        if (Character.isDigit(className.charAt(0))) {
            return "字段code不能包含特殊字符，不能以数字开头";
        }

        // 6. 类名应该符合驼峰命名法的规则
        // 例如：`StudentManager` 或 `InvoiceValidator`
        //for (int i = 1; i < className.length(); i++) {
        //    char ch = className.charAt(i);
        //    if (!Character.isLowerCase(ch) && !Character.isUpperCase(ch)) {
        //        return false;
        //    }
        //}
        return null;
    }

    //public static void main(String[] args) {
    //    // 测试样例
    //    String[] testClassNames = {
    //            "StudentManager", "InvoiceValidator", "orderService", "_InvalidName", "123Invalid",
    //            "ValidName", "Invalid_Name", "int", "List"
    //    };
    //
    //    for (String name : testClassNames) {
    //        System.out.println("Class Name: " + name + " is valid: " + isValidClassName(name));
    //    }
    //}
}
